import { asyncRoutesMap } from '@/router/config'

function filterAsyncRouterMap(config, userid = 2) {
  const routerBrr = config.filter(item => item.meta.userId.indexOf(userid) > -1);
  config.forEach(item => {
    // cßnsole.log('item: ', item.meta.userId.includes(userid))
    if (item.meta.userId.includes(userid)) {
      // console.log(item.children, 'children')
      item.children && item.children.length && (item.children = filterAsyncRouterMap(item.children))
    }
  })
  console.log(routerBrr, 'config')
  return routerBrr;
}

// 授权信息
const permission = {
  namespaced: true,
  state: {
    token: '', // 登陆token
    roles: [], // 用户角色
    userInfo: {}, // 用户个人信息
    userRoutes: [] // 过滤后的路由数组
  },
  mutations: {
    // 登陆token
    SET_TOKEN(state, token) {
      state.token = token
    },
    // 用户个人信息
    SET_USER_INFO(state, userInfo) {
      state.userInfo = userInfo
    },
    // 设置用户身份数组信息
    SET_USER_ROLE(state, item) {
      state.roles.push(item.userid)
    },
    // 设置过滤后的数组
    SET_ADD_ROUTES(state, routes) {
      const userid = state.roles[0]; // 用户身份
      const roleRoutes = filterAsyncRouterMap(asyncRoutesMap, userid)
      console.log('roleRoutes: ', roleRoutes)
      state.userRoutes = routes
    }
  },
  actions: {
    // 登陆接口
    Login({ commit }) {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve('lotin-success')
          commit('SET_TOKEN', 'token-----123-test')
        }, 1000)
      })
    },
    // 用户个人信息接口
    GetUserInfo() {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve('lotin-success')
          const userInfo = {
            avatar: '', // 用户渲染
            nickname: 'nickname', // 你的名字
            role: '超级管理员', // userId: 0 你的身份
            userid: 0
          }
          commit('SET_USER_ROLE', userInfo)
          commit('SET_USER_INFO', userInfo)
        }, 1000)
      })
    },
    // 基于用户信息接口的判断路由权限
    // 1. 解决异步： 在action中使用promise，除了可以解决异步请求问题，
    // 2. 获取结果：还能让当前调用action的主体，获取到action在commit之后的结果
    GeneratorRoutes({ commit }) {
      return new Promise((resolve, reject) => {
        resolve()
        commit('SET_ADD_ROUTES')
      })
    }
  }
}

export { permission }
